/*
 * Copyright Codeplay Software Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use these files except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// DO NOT MODIFY BY HAND
// This file was automatically generated by generate_pooling_tests.py.
// Results calculated using Tensorflow v1.12.0.

#include <gtest/gtest.h>

#include "sycldnn/padding_mode.h"

#include "sycldnn/pooling/operators.h"

#include "test/types/cartesian_product.h"
#include "test/types/kernel_data_types.h"
#include "test/types/test_backend_types.h"
#include "test/types/to_gtest_types.h"

#include "test/pooling/pooling_fixture.h"

#include <array>
#include <vector>

using namespace sycldnn;  // NOLINT(google-build-using-namespace)
using DataTypeList = sycldnn::types::KernelDataTypes;
using Backends = sycldnn::types::DefaultBackendTypes;

using SNNTypePairs =
    sycldnn::types::CartesianProduct<DataTypeList, Backends>::type;
using GTestTypePairs = sycldnn::types::ToGTestTypes<SNNTypePairs>::type;

template <typename Pair>
using MaxwithnanWindow5Stride2Grad =
    PoolingFixture<typename Pair::FirstType, typename Pair::SecondType,
                   pooling::MaxWithNan, pooling::Backpropagate>;
TYPED_TEST_SUITE(MaxwithnanWindow5Stride2Grad, GTestTypePairs);
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x7x7x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0., 1.,
      0.,  2., 0., 7., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  5., 0., 6., 0.,
      15., 0., 0., 0., 0., 0., 0., 0., 0., 0., 22., 0., 24., 0., 54.};
  const std::array<int, 4> in_shape = {{1, 7, 7, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x7x7x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
      2., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 3., 0., 4.};
  const std::array<int, 4> in_shape = {{1, 7, 7, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x7x7x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 1.,  2.,  0., 0., 3.,  4.,  0., 0., 12.,  14.,
      0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 9.,  10., 0., 0., 11., 12., 0., 0., 28.,  30.,
      0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 42., 44., 0., 0., 46., 48., 0., 0., 104., 108.};
  const std::array<int, 4> in_shape = {{1, 7, 7, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x7x7x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 2., 0., 0.,
      3., 4., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 5., 6., 0., 0., 7., 8.};
  const std::array<int, 4> in_shape = {{1, 7, 7, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x7x7x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,   0.,   0.,   0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,   0.,   0.,   0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,   0.,   0.,   0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,   2.,   3.,   4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      22.,  24.,  26.,  28., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,   0.,   0.,   0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,   0.,   0.,   0.,  0., 0., 0., 0., 17., 18., 19., 20., 0., 0., 0., 0.,
      21.,  22.,  23.,  24., 0., 0., 0., 0., 54., 56., 58., 60., 0., 0., 0., 0.,
      0.,   0.,   0.,   0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,   0.,   0.,   0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      82.,  84.,  86.,  88., 0., 0., 0., 0., 90., 92., 94., 96., 0., 0., 0., 0.,
      204., 208., 212., 216.};
  const std::array<int, 4> in_shape = {{1, 7, 7, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x7x7x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0.,
      0.,  0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0.,
      0.,  0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0.,
      0.,  0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0.,
      0.,  0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0.,
      0.,  0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0.,
      0.,  0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0.,
      0.,  0., 0., 0., 0., 0.,  0.,  0.,  0., 1., 2., 3., 4., 0., 0., 0.,  0.,
      5.,  6., 7., 8., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0.,
      0.,  0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0.,
      0.,  0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 9., 10., 11.,
      12., 0., 0., 0., 0., 13., 14., 15., 16.};
  const std::array<int, 4> in_shape = {{1, 7, 7, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x7x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 0., 0., 1., 0., 2., 0., 7.,  0., 0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 5., 0., 6.,  0., 15., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 22., 0., 24., 0., 54.};
  const std::array<int, 4> in_shape = {{1, 7, 8, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x7x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 2., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 3., 0., 4., 0.};
  const std::array<int, 4> in_shape = {{1, 7, 8, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x7x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 1.,  2.,  0., 0., 3.,  4.,  0., 0., 12.,  14.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 9.,  10., 0., 0., 11., 12., 0., 0., 28.,  30.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 42., 44., 0., 0., 46., 48., 0., 0., 104., 108.};
  const std::array<int, 4> in_shape = {{1, 7, 8, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x7x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1., 2., 0., 0., 3., 4., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 5., 6., 0., 0., 7., 8., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 7, 8, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x7x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,  0.,  0.,  0.,  0.,  1., 2., 3.,  4.,  0.,   0.,   0.,   0.,
      5.,  6.,  7.,  8.,  0.,  0.,  0., 0., 22., 24., 26.,  28.,  0.,   0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      17., 18., 19., 20., 0.,  0.,  0., 0., 21., 22., 23.,  24.,  0.,   0.,
      0.,  0.,  54., 56., 58., 60., 0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 82., 84., 86.,  88.,  0.,   0.,
      0.,  0.,  90., 92., 94., 96., 0., 0., 0.,  0.,  204., 208., 212., 216.};
  const std::array<int, 4> in_shape = {{1, 7, 8, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x7x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1., 2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      9., 10., 11., 12., 0., 0., 0., 0., 13., 14., 15., 16., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 7, 8, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x7x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,  0., 0., 0., 0.,
      0., 0., 0., 0., 0., 1., 0., 2., 0., 3.,  0., 9.,  0., 0.,  0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 6., 0., 7.,  0., 8.,  0., 19., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 27., 0., 29., 0., 31., 0., 68.};
  const std::array<int, 4> in_shape = {{1, 7, 10, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x7x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 2., 0., 3., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 4., 0., 5., 0., 6., 0.};
  const std::array<int, 4> in_shape = {{1, 7, 10, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x7x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 1.,  2.,
      0., 0., 3.,  4.,  0., 0., 5.,  6.,  0., 0., 16.,  18., 0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 11., 12., 0., 0., 13.,  14., 0., 0., 15., 16.,
      0., 0., 36., 38., 0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 52., 54.,
      0., 0., 56., 58., 0., 0., 60., 62., 0., 0., 132., 136.};
  const std::array<int, 4> in_shape = {{1, 7, 10, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x7x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 1., 2.,
      0., 0., 3., 4., 0., 0., 5., 6.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 7., 8., 0., 0., 9., 10., 0., 0., 11., 12., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 7, 10, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x7x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   1.,   2.,   3.,   4.,
      0.,   0.,   0.,   0.,   5.,   6.,   7.,   8.,   0.,   0.,   0.,   0.,
      9.,   10.,  11.,  12.,  0.,   0.,   0.,   0.,   30.,  32.,  34.,  36.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   21.,  22.,  23.,  24.,  0.,   0.,   0.,   0.,
      25.,  26.,  27.,  28.,  0.,   0.,   0.,   0.,   29.,  30.,  31.,  32.,
      0.,   0.,   0.,   0.,   70.,  72.,  74.,  76.,  0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      102., 104., 106., 108., 0.,   0.,   0.,   0.,   110., 112., 114., 116.,
      0.,   0.,   0.,   0.,   118., 120., 122., 124., 0.,   0.,   0.,   0.,
      260., 264., 268., 272.};
  const std::array<int, 4> in_shape = {{1, 7, 10, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x7x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      9.,  10., 11., 12., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      13., 14., 15., 16., 0., 0., 0., 0., 17., 18., 19., 20., 0., 0., 0., 0.,
      21., 22., 23., 24., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 7, 10, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x8x7x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,  0., 2.,  0., 7.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 5.,  0., 6.,  0., 15.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 22., 0., 24., 0., 54.};
  const std::array<int, 4> in_shape = {{1, 8, 7, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x8x7x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 1., 0., 2., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 3., 0., 4., 0., 0., 0., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 8, 7, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x8x7x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 1.,   2.,
      0., 0., 3.,  4.,  0., 0., 12., 14., 0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 9.,  10., 0., 0., 11.,  12.,
      0., 0., 28., 30., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0.,  0.,  0., 0., 42., 44., 0., 0., 46., 48., 0., 0., 104., 108.};
  const std::array<int, 4> in_shape = {{1, 8, 7, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x8x7x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      1., 2., 0., 0., 3., 4., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 5., 6., 0., 0.,
      7., 8., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 8, 7, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x8x7x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 1.,  2.,  3.,   4.,   0.,   0.,
      0., 0., 5.,  6.,  7.,  8.,  0., 0., 0.,  0.,  22.,  24.,  26.,  28.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 17., 18., 19.,  20.,  0.,   0.,
      0., 0., 21., 22., 23., 24., 0., 0., 0.,  0.,  54.,  56.,  58.,  60.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0.,  0.,  0.,   0.,   0.,   0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 82., 84., 86.,  88.,  0.,   0.,
      0., 0., 90., 92., 94., 96., 0., 0., 0.,  0.,  204., 208., 212., 216.};
  const std::array<int, 4> in_shape = {{1, 8, 7, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x8x7x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5., 6.,  7.,  8.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 9., 10., 11., 12., 0., 0., 0., 0.,
      13., 14., 15., 16., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 8, 7, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x8x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,  0., 2.,  0., 7.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 5.,  0., 6.,  0., 15.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 22., 0., 24., 0., 54.};
  const std::array<int, 4> in_shape = {{1, 8, 8, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x8x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 1., 0., 2., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 3., 0., 4., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 8, 8, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x8x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 1.,  2.,  0., 0., 3.,  4.,  0., 0., 12.,  14.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 9.,  10., 0., 0., 11., 12., 0., 0., 28.,  30.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 42., 44., 0., 0., 46., 48., 0., 0., 104., 108.};
  const std::array<int, 4> in_shape = {{1, 8, 8, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x8x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1., 2., 0., 0., 3., 4., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 5., 6., 0., 0., 7., 8., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 8, 8, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x8x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  1., 2., 3.,  4.,
      0.,   0.,   0.,   0.,  5.,  6.,  7.,  8.,  0.,  0.,  0., 0., 22., 24.,
      26.,  28.,  0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  17., 18., 19., 20., 0.,  0.,  0., 0., 21., 22.,
      23.,  24.,  0.,   0.,  0.,  0.,  54., 56., 58., 60., 0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0.,  0.,
      0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 82., 84.,
      86.,  88.,  0.,   0.,  0.,  0.,  90., 92., 94., 96., 0., 0., 0.,  0.,
      204., 208., 212., 216.};
  const std::array<int, 4> in_shape = {{1, 8, 8, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x8x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1., 2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      9., 10., 11., 12., 0., 0., 0., 0., 13., 14., 15., 16., 0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 8, 8, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x8x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,  0., 0.,
      0., 1., 0., 2., 0., 3., 0., 9., 0., 0.,  0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 0., 0., 6., 0., 7., 0., 8.,  0., 19., 0., 0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 27., 0., 29., 0., 31., 0., 68.};
  const std::array<int, 4> in_shape = {{1, 8, 10, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x8x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 2., 0.,
      3., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      4., 0., 5., 0., 6., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 8, 10, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x8x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 1.,  2.,  0., 0., 3.,  4.,  0., 0., 5.,  6.,  0., 0., 16.,  18.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 11., 12., 0., 0., 13.,  14.,
      0., 0., 15., 16., 0., 0., 36., 38., 0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 52., 54., 0., 0., 56., 58., 0., 0., 60., 62., 0., 0., 132., 136.};
  const std::array<int, 4> in_shape = {{1, 8, 10, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x8x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 1., 2.,
      0., 0., 3., 4., 0., 0., 5., 6.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 7., 8., 0., 0., 9., 10., 0., 0., 11., 12., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 8, 10, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x8x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      1.,   2.,   3.,   4.,   0.,   0.,   0.,   0.,   5.,   6.,   7.,   8.,
      0.,   0.,   0.,   0.,   9.,   10.,  11.,  12.,  0.,   0.,   0.,   0.,
      30.,  32.,  34.,  36.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   21.,  22.,  23.,  24.,
      0.,   0.,   0.,   0.,   25.,  26.,  27.,  28.,  0.,   0.,   0.,   0.,
      29.,  30.,  31.,  32.,  0.,   0.,   0.,   0.,   70.,  72.,  74.,  76.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   102., 104., 106., 108., 0.,   0.,   0.,   0.,
      110., 112., 114., 116., 0.,   0.,   0.,   0.,   118., 120., 122., 124.,
      0.,   0.,   0.,   0.,   260., 264., 268., 272.};
  const std::array<int, 4> in_shape = {{1, 8, 10, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x8x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      9.,  10., 11., 12., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      13., 14., 15., 16., 0., 0., 0., 0., 17., 18., 19., 20., 0., 0., 0., 0.,
      21., 22., 23., 24., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 8, 10, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x10x7x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,  0., 2.,  0., 7.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 5.,  0., 6.,  0., 15.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 9.,  0., 10., 0., 23.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 30., 0., 32., 0., 70.};
  const std::array<int, 4> in_shape = {{1, 10, 7, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x10x7x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 2., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 3., 0., 4., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 5., 0., 6., 0., 0., 0., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 10, 7, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x10x7x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 1.,  2.,
      0., 0., 3.,  4.,  0., 0., 12., 14., 0., 0., 0.,   0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 9.,   10., 0., 0., 11., 12.,
      0., 0., 28., 30., 0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 17., 18., 0., 0., 19.,  20., 0., 0., 44., 46.,
      0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,
      0., 0., 58., 60., 0., 0., 62., 64., 0., 0., 136., 140.};
  const std::array<int, 4> in_shape = {{1, 10, 7, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x10x7x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 2., 0., 0.,  3., 4., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,
      0., 0., 5., 6., 0., 0., 7., 8., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 9., 10., 0., 0., 11., 12.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 10, 7, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x10x7x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   1.,   2.,   3.,   4.,   0.,   0.,  0.,  0.,   5.,   6.,   7.,   8.,
      0.,   0.,   0.,   0.,   22.,  24.,  26., 28., 0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   17.,  18., 19., 20.,  0.,   0.,   0.,   0.,
      21.,  22.,  23.,  24.,  0.,   0.,   0.,  0.,  54.,  56.,  58.,  60.,  0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   33.,  34.,  35.,  36.,
      0.,   0.,   0.,   0.,   37.,  38.,  39., 40., 0.,   0.,   0.,   0.,   86.,
      88.,  90.,  92.,  0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,
      114., 116., 118., 120., 0.,   0.,   0.,  0.,  122., 124., 126., 128., 0.,
      0.,   0.,   0.,   268., 272., 276., 280.};
  const std::array<int, 4> in_shape = {{1, 10, 7, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x10x7x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 9.,  10., 11., 12., 0., 0., 0., 0.,
      13., 14., 15., 16., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      17., 18., 19., 20., 0., 0., 0., 0., 21., 22., 23., 24., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 10, 7, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x10x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,  0., 2.,  0., 7.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 5.,  0., 6.,  0., 15.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 9.,  0., 10., 0., 23.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 30., 0., 32., 0., 70.};
  const std::array<int, 4> in_shape = {{1, 10, 8, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x10x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 1., 0., 2., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 3., 0., 4., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 5., 0., 6., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 10, 8, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x10x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 1.,  2.,  0., 0., 3.,  4.,  0., 0., 12.,  14.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 9.,  10., 0., 0., 11., 12., 0., 0., 28.,  30.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 17., 18., 0., 0., 19., 20., 0., 0., 44.,  46.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,   0.,
      0., 0., 0., 0., 0., 0., 58., 60., 0., 0., 62., 64., 0., 0., 136., 140.};
  const std::array<int, 4> in_shape = {{1, 10, 8, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x10x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0.,
      1., 2., 0., 0., 3., 4., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 5.,  6.,  0., 0.,
      7., 8., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 9., 10., 0., 0., 11., 12., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0.,  0.};
  const std::array<int, 4> in_shape = {{1, 10, 8, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x10x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   1.,   2.,   3.,   4.,  0.,  0.,   0.,   0.,   5.,
      6.,  7.,   8.,   0.,   0.,   0.,   0.,   22., 24., 26.,  28.,  0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   17.,  18.,  19.,  20.,  0.,  0.,  0.,   0.,   21.,  22.,
      23., 24.,  0.,   0.,   0.,   0.,   54.,  56., 58., 60.,  0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   33.,  34.,  35.,  36.,  0.,   0.,  0.,  0.,   37.,  38.,  39.,
      40., 0.,   0.,   0.,   0.,   86.,  88.,  90., 92., 0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,   0.,   0.,
      0.,  114., 116., 118., 120., 0.,   0.,   0.,  0.,  122., 124., 126., 128.,
      0.,  0.,   0.,   0.,   268., 272., 276., 280.};
  const std::array<int, 4> in_shape = {{1, 10, 8, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x10x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      9.,  10., 11., 12., 0., 0., 0., 0., 13., 14., 15., 16., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      17., 18., 19., 20., 0., 0., 0., 0., 21., 22., 23., 24., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 10, 8, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x10x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0.,  0., 0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0.,  0., 0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 1.,
      0., 2., 0., 3., 0., 9.,  0., 0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0., 6., 0., 7., 0.,  8., 0.,  19., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0., 0., 0., 0., 0., 11., 0., 12., 0.,  13., 0.,  29., 0.,  0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0.,  0., 0.,  37., 0.,  39., 0.,  41., 0., 88.};
  const std::array<int, 4> in_shape = {{1, 10, 10, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x10x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 2., 0., 3., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 4., 0., 5., 0.,
      6., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 7.,
      0., 8., 0., 9., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 10, 10, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x10x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,
      0., 0., 1.,  2.,  0., 0., 3.,   4.,  0., 0., 5.,  6.,  0., 0., 16., 18.,
      0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 11., 12., 0., 0., 13., 14.,
      0., 0., 15., 16., 0., 0., 36.,  38., 0., 0., 0.,  0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,
      0., 0., 21., 22., 0., 0., 23.,  24., 0., 0., 25., 26., 0., 0., 56., 58.,
      0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,
      0., 0., 0.,  0.,  0., 0., 0.,   0.,  0., 0., 72., 74., 0., 0., 76., 78.,
      0., 0., 80., 82., 0., 0., 172., 176.};
  const std::array<int, 4> in_shape = {{1, 10, 10, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x10x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0., 0.,  0., 0., 1.,  2.,  0., 0., 3.,  4.,  0., 0.,
      5.,  6.,  0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      7.,  8.,  0., 0., 9., 10., 0., 0., 11., 12., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0., 0.,  0., 0., 13., 14., 0., 0., 15., 16., 0., 0.,
      17., 18., 0., 0., 0., 0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0., 0.,  0., 0.};
  const std::array<int, 4> in_shape = {{1, 10, 10, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME1x10x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      1.,   2.,   3.,   4.,   0.,   0.,   0.,   0.,   5.,   6.,   7.,   8.,
      0.,   0.,   0.,   0.,   9.,   10.,  11.,  12.,  0.,   0.,   0.,   0.,
      30.,  32.,  34.,  36.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   21.,  22.,  23.,  24.,
      0.,   0.,   0.,   0.,   25.,  26.,  27.,  28.,  0.,   0.,   0.,   0.,
      29.,  30.,  31.,  32.,  0.,   0.,   0.,   0.,   70.,  72.,  74.,  76.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   41.,  42.,  43.,  44.,  0.,   0.,   0.,   0.,
      45.,  46.,  47.,  48.,  0.,   0.,   0.,   0.,   49.,  50.,  51.,  52.,
      0.,   0.,   0.,   0.,   110., 112., 114., 116., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      142., 144., 146., 148., 0.,   0.,   0.,   0.,   150., 152., 154., 156.,
      0.,   0.,   0.,   0.,   158., 160., 162., 164., 0.,   0.,   0.,   0.,
      340., 344., 348., 352.};
  const std::array<int, 4> in_shape = {{1, 10, 10, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID1x10x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      9.,  10., 11., 12., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      13., 14., 15., 16., 0., 0., 0., 0., 17., 18., 19., 20., 0., 0., 0., 0.,
      21., 22., 23., 24., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      25., 26., 27., 28., 0., 0., 0., 0., 29., 30., 31., 32., 0., 0., 0., 0.,
      33., 34., 35., 36., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{1, 10, 10, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x7x7x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0.,  0., 0.,  0.,  0.,  0.,  0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 1.,  0., 2.,  0.,  7.,  0.,  0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,
      5., 0.,  6., 0.,  15., 0.,  0.,  0.,   0.,  0.,  0.,  0.,  0.,  0.,  22.,
      0., 24., 0., 54., 0.,  0.,  0.,  0.,   0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0.,  0., 0.,  0.,  17., 0.,  18.,  0.,  39., 0.,  0.,  0.,  0.,  0.,
      0., 0.,  0., 0.,  21., 0.,  22., 0.,   47., 0.,  0.,  0.,  0.,  0.,  0.,
      0., 0.,  0., 54., 0.,  56., 0.,  118., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0.,  0., 0.,  0.,  0.,  0.,  0.,   0.,  33., 0.,  34., 0.,  71., 0.,
      0., 0.,  0., 0.,  0.,  0.,  0.,  0.,   37., 0.,  38., 0.,  79., 0.,  0.,
      0., 0.,  0., 0.,  0.,  0.,  0.,  86.,  0.,  88., 0.,  182.};
  const std::array<int, 4> in_shape = {{3, 7, 7, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x7x7x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 0.,  0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 0.,  0., 1., 0.,
      2., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 3., 0.,  4., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 0.,  0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 5.,  0., 6., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 7., 0., 8., 0.,  0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 0.,  0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0., 9., 0., 10., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 11., 0., 12.};
  const std::array<int, 4> in_shape = {{3, 7, 7, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x7x7x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 1.,   2.,   0., 0., 3.,   4.,   0., 0., 12.,  14.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 9.,   10.,  0., 0., 11.,  12.,  0., 0., 28.,  30.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 42.,  44.,  0., 0., 46.,  48.,  0., 0., 104., 108.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 33.,  34.,  0., 0., 35.,  36.,  0., 0., 76.,  78.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 41.,  42.,  0., 0., 43.,  44.,  0., 0., 92.,  94.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 106., 108., 0., 0., 110., 112., 0., 0., 232., 236.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 65.,  66.,  0., 0., 67.,  68.,  0., 0., 140., 142.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 73.,  74.,  0., 0., 75.,  76.,  0., 0., 156., 158.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 170., 172., 0., 0., 174., 176., 0., 0., 360., 364.};
  const std::array<int, 4> in_shape = {{3, 7, 7, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x7x7x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  1.,  2.,  0.,  0.,  3., 4.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  5.,  6.,  0.,  0.,  7.,  8.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  9., 10., 0.,
      0.,  11., 12., 0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  13., 14., 0., 0.,  15.,
      16., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  17., 18., 0.,  0., 19., 20., 0.,  0., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0., 0.,  0.,
      0.,  0.,  0.,  21., 22., 0.,  0.,  23., 24.};
  const std::array<int, 4> in_shape = {{3, 7, 7, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x7x7x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   1.,   2.,   3.,   4.,   0.,   0.,   0.,   0.,
      5.,   6.,   7.,   8.,   0.,   0.,   0.,   0.,   22.,  24.,  26.,  28.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      17.,  18.,  19.,  20.,  0.,   0.,   0.,   0.,   21.,  22.,  23.,  24.,
      0.,   0.,   0.,   0.,   54.,  56.,  58.,  60.,  0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   82.,  84.,  86.,  88.,
      0.,   0.,   0.,   0.,   90.,  92.,  94.,  96.,  0.,   0.,   0.,   0.,
      204., 208., 212., 216., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   65.,  66.,  67.,  68.,
      0.,   0.,   0.,   0.,   69.,  70.,  71.,  72.,  0.,   0.,   0.,   0.,
      150., 152., 154., 156., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   81.,  82.,  83.,  84.,  0.,   0.,   0.,   0.,
      85.,  86.,  87.,  88.,  0.,   0.,   0.,   0.,   182., 184., 186., 188.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      210., 212., 214., 216., 0.,   0.,   0.,   0.,   218., 220., 222., 224.,
      0.,   0.,   0.,   0.,   460., 464., 468., 472., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      129., 130., 131., 132., 0.,   0.,   0.,   0.,   133., 134., 135., 136.,
      0.,   0.,   0.,   0.,   278., 280., 282., 284., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   145., 146., 147., 148.,
      0.,   0.,   0.,   0.,   149., 150., 151., 152., 0.,   0.,   0.,   0.,
      310., 312., 314., 316., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   338., 340., 342., 344., 0.,   0.,   0.,   0.,
      346., 348., 350., 352., 0.,   0.,   0.,   0.,   716., 720., 724., 728.};
  const std::array<int, 4> in_shape = {{3, 7, 7, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x7x7x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  2.,  3.,  4.,  0.,  0.,  0.,
      0.,  5.,  6.,  7.,  8.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  9.,  10., 11., 12., 0.,  0.,  0.,  0.,  13., 14., 15.,
      16., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  17., 18., 19., 20., 0.,  0.,
      0.,  0.,  21., 22., 23., 24., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  25., 26., 27., 28., 0.,  0.,  0.,  0.,  29., 30.,
      31., 32., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  33., 34., 35., 36., 0.,
      0.,  0.,  0.,  37., 38., 39., 40., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  41., 42., 43., 44., 0.,  0.,  0.,  0.,  45.,
      46., 47., 48.};
  const std::array<int, 4> in_shape = {{3, 7, 7, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x7x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0.,  0., 0.,  0., 0.,  0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 1.,  0., 2.,  0., 7.,  0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 5.,  0., 6.,  0., 15., 0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 22., 0., 24., 0., 54., 0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 0.,  0., 0.,  0., 0.,  0., 0., 0., 17., 0., 18., 0., 39.,
      0., 0., 0., 0.,  0., 0.,  0., 0.,  0., 0., 0., 21., 0., 22., 0., 47.,
      0., 0., 0., 0.,  0., 0.,  0., 0.,  0., 0., 0., 54., 0., 56., 0., 118.,
      0., 0., 0., 0.,  0., 0.,  0., 0.,  0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 33., 0., 34., 0., 71., 0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 37., 0., 38., 0., 79., 0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 86., 0., 88., 0., 182.};
  const std::array<int, 4> in_shape = {{3, 7, 8, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x7x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,  0., 0.,
      0., 0., 1., 0., 2., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,  0., 0.,
      0., 3., 0., 4., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 5., 0., 6., 0., 0.,  0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 7., 0., 8., 0., 0., 0.,  0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  9., 0.,  10., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 11., 0., 12., 0.};
  const std::array<int, 4> in_shape = {{3, 7, 8, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x7x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   1.,  2.,  0.,   0.,
      3.,  4.,  0., 0., 12.,  14.,  0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      9.,  10., 0., 0., 11.,  12.,  0., 0., 28.,  30.,  0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 42.,  44.,  0., 0., 46.,  48.,  0.,  0.,  104., 108.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   33., 34., 0.,   0.,
      35., 36., 0., 0., 76.,  78.,  0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      41., 42., 0., 0., 43.,  44.,  0., 0., 92.,  94.,  0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 106., 108., 0., 0., 110., 112., 0.,  0.,  232., 236.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   65., 66., 0.,   0.,
      67., 68., 0., 0., 140., 142., 0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      73., 74., 0., 0., 75.,  76.,  0., 0., 156., 158., 0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,  0., 0., 170., 172., 0., 0., 174., 176., 0.,  0.,  360., 364.};
  const std::array<int, 4> in_shape = {{3, 7, 8, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x7x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  0., 0., 3.,  4.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 5.,  6.,  0., 0., 7.,  8.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 9.,  10., 0., 0., 11., 12., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 13., 14., 0., 0., 15., 16., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 17., 18., 0., 0., 19., 20., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 21., 22., 0., 0., 23., 24., 0., 0.};
  const std::array<int, 4> in_shape = {{3, 7, 8, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x7x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   1.,   2.,   3.,   4.,   0.,   0.,   0.,   0.,
      5.,   6.,   7.,   8.,   0.,   0.,   0.,   0.,   22.,  24.,  26.,  28.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   17.,  18.,  19.,  20.,
      0.,   0.,   0.,   0.,   21.,  22.,  23.,  24.,  0.,   0.,   0.,   0.,
      54.,  56.,  58.,  60.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      82.,  84.,  86.,  88.,  0.,   0.,   0.,   0.,   90.,  92.,  94.,  96.,
      0.,   0.,   0.,   0.,   204., 208., 212., 216., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      65.,  66.,  67.,  68.,  0.,   0.,   0.,   0.,   69.,  70.,  71.,  72.,
      0.,   0.,   0.,   0.,   150., 152., 154., 156., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   81.,  82.,  83.,  84.,  0.,   0.,   0.,   0.,
      85.,  86.,  87.,  88.,  0.,   0.,   0.,   0.,   182., 184., 186., 188.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   210., 212., 214., 216.,
      0.,   0.,   0.,   0.,   218., 220., 222., 224., 0.,   0.,   0.,   0.,
      460., 464., 468., 472., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   129., 130., 131., 132.,
      0.,   0.,   0.,   0.,   133., 134., 135., 136., 0.,   0.,   0.,   0.,
      278., 280., 282., 284., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      145., 146., 147., 148., 0.,   0.,   0.,   0.,   149., 150., 151., 152.,
      0.,   0.,   0.,   0.,   310., 312., 314., 316., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   338., 340., 342., 344., 0.,   0.,   0.,   0.,
      346., 348., 350., 352., 0.,   0.,   0.,   0.,   716., 720., 724., 728.};
  const std::array<int, 4> in_shape = {{3, 7, 8, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x7x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      9.,  10., 11., 12., 0., 0., 0., 0., 13., 14., 15., 16., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      17., 18., 19., 20., 0., 0., 0., 0., 21., 22., 23., 24., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      25., 26., 27., 28., 0., 0., 0., 0., 29., 30., 31., 32., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      33., 34., 35., 36., 0., 0., 0., 0., 37., 38., 39., 40., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      41., 42., 43., 44., 0., 0., 0., 0., 45., 46., 47., 48., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{3, 7, 8, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x7x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,  0., 1.,  0., 2.,  0., 3.,   0., 9.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 6.,   0., 7.,   0., 8.,
      0., 19., 0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,   0., 0.,   0., 27.,
      0., 29., 0., 31., 0., 68., 0., 0.,  0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,   0., 21.,  0., 22.,
      0., 23., 0., 49., 0., 0.,  0., 0.,  0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 26., 0., 27., 0., 28., 0., 59., 0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 67., 0., 69., 0., 71., 0., 148., 0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 41., 0., 42., 0., 43., 0., 89., 0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,  0., 46., 0., 47., 0., 48.,  0., 99.,  0., 0.,
      0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 107., 0., 109., 0., 111.,
      0., 228.};
  const std::array<int, 4> in_shape = {{3, 7, 10, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x7x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 1., 0., 2., 0., 3.,  0.,  0.,
      0.,  0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 4., 0.,  5.,  0.,
      6.,  0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 7., 0., 8.,  0.,  9.,
      0.,  0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  10., 0.,
      11., 0.,  12., 0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 13., 0.,  14.,
      0.,  15., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      16., 0.,  17., 0., 18., 0.};
  const std::array<int, 4> in_shape = {{3, 7, 10, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x7x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 1.,   2.,
      0., 0., 3.,   4.,   0., 0., 5.,   6.,   0., 0., 16.,  18.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 11.,  12.,  0., 0., 13.,  14.,  0., 0., 15.,  16.,
      0., 0., 36.,  38.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 52.,  54.,  0., 0., 56.,  58.,
      0., 0., 60.,  62.,  0., 0., 132., 136., 0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 41.,  42.,  0., 0., 43.,  44.,
      0., 0., 45.,  46.,  0., 0., 96.,  98.,  0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 51.,  52.,
      0., 0., 53.,  54.,  0., 0., 55.,  56.,  0., 0., 116., 118.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 132., 134., 0., 0., 136., 138., 0., 0., 140., 142.,
      0., 0., 292., 296., 0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 81.,  82.,  0., 0., 83.,  84.,  0., 0., 85.,  86.,
      0., 0., 176., 178., 0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 91.,  92.,  0., 0., 93.,  94.,
      0., 0., 95.,  96.,  0., 0., 196., 198., 0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 212., 214.,
      0., 0., 216., 218., 0., 0., 220., 222., 0., 0., 452., 456.};
  const std::array<int, 4> in_shape = {{3, 7, 10, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x7x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 1.,  2.,  0., 0., 3.,  4.,  0., 0.,
      5.,  6.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      7.,  8.,  0., 0., 9.,  10., 0., 0., 11., 12., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 13., 14., 0., 0., 15., 16., 0., 0., 17., 18., 0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 19., 20., 0., 0.,
      21., 22., 0., 0., 23., 24., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      25., 26., 0., 0., 27., 28., 0., 0., 29., 30., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 31., 32., 0., 0., 33., 34., 0., 0.,
      35., 36., 0., 0.};
  const std::array<int, 4> in_shape = {{3, 7, 10, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x7x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   1.,   2.,   3.,   4.,
      0.,   0.,   0.,   0.,   5.,   6.,   7.,   8.,   0.,   0.,   0.,   0.,
      9.,   10.,  11.,  12.,  0.,   0.,   0.,   0.,   30.,  32.,  34.,  36.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   21.,  22.,  23.,  24.,  0.,   0.,   0.,   0.,
      25.,  26.,  27.,  28.,  0.,   0.,   0.,   0.,   29.,  30.,  31.,  32.,
      0.,   0.,   0.,   0.,   70.,  72.,  74.,  76.,  0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      102., 104., 106., 108., 0.,   0.,   0.,   0.,   110., 112., 114., 116.,
      0.,   0.,   0.,   0.,   118., 120., 122., 124., 0.,   0.,   0.,   0.,
      260., 264., 268., 272., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      81.,  82.,  83.,  84.,  0.,   0.,   0.,   0.,   85.,  86.,  87.,  88.,
      0.,   0.,   0.,   0.,   89.,  90.,  91.,  92.,  0.,   0.,   0.,   0.,
      190., 192., 194., 196., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   101., 102., 103., 104.,
      0.,   0.,   0.,   0.,   105., 106., 107., 108., 0.,   0.,   0.,   0.,
      109., 110., 111., 112., 0.,   0.,   0.,   0.,   230., 232., 234., 236.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   262., 264., 266., 268., 0.,   0.,   0.,   0.,
      270., 272., 274., 276., 0.,   0.,   0.,   0.,   278., 280., 282., 284.,
      0.,   0.,   0.,   0.,   580., 584., 588., 592., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   161., 162., 163., 164., 0.,   0.,   0.,   0.,
      165., 166., 167., 168., 0.,   0.,   0.,   0.,   169., 170., 171., 172.,
      0.,   0.,   0.,   0.,   350., 352., 354., 356., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      181., 182., 183., 184., 0.,   0.,   0.,   0.,   185., 186., 187., 188.,
      0.,   0.,   0.,   0.,   189., 190., 191., 192., 0.,   0.,   0.,   0.,
      390., 392., 394., 396., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   422., 424., 426., 428.,
      0.,   0.,   0.,   0.,   430., 432., 434., 436., 0.,   0.,   0.,   0.,
      438., 440., 442., 444., 0.,   0.,   0.,   0.,   900., 904., 908., 912.};
  const std::array<int, 4> in_shape = {{3, 7, 10, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x7x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      9.,  10., 11., 12., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      13., 14., 15., 16., 0., 0., 0., 0., 17., 18., 19., 20., 0., 0., 0., 0.,
      21., 22., 23., 24., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 25., 26., 27., 28., 0., 0., 0., 0.,
      29., 30., 31., 32., 0., 0., 0., 0., 33., 34., 35., 36., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 37., 38., 39., 40., 0., 0., 0., 0.,
      41., 42., 43., 44., 0., 0., 0., 0., 45., 46., 47., 48., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      49., 50., 51., 52., 0., 0., 0., 0., 53., 54., 55., 56., 0., 0., 0., 0.,
      57., 58., 59., 60., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      61., 62., 63., 64., 0., 0., 0., 0., 65., 66., 67., 68., 0., 0., 0., 0.,
      69., 70., 71., 72., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{3, 7, 10, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x8x7x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,
      0., 0.,  0., 0.,  0., 0.,  0., 1.,  0., 2.,  0., 7.,  0., 0.,  0., 0.,
      0., 0.,  0., 0.,  0., 5.,  0., 6.,  0., 15., 0., 0.,  0., 0.,  0., 0.,
      0., 0.,  0., 22., 0., 24., 0., 54., 0., 0.,  0., 0.,  0., 0.,  0., 0.,
      0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 17.,
      0., 18., 0., 39., 0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 21., 0., 22.,
      0., 47., 0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 54., 0., 56., 0., 118.,
      0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,
      0., 0.,  0., 0.,  0., 0.,  0., 33., 0., 34., 0., 71., 0., 0.,  0., 0.,
      0., 0.,  0., 0.,  0., 37., 0., 38., 0., 79., 0., 0.,  0., 0.,  0., 0.,
      0., 0.,  0., 86., 0., 88., 0., 182.};
  const std::array<int, 4> in_shape = {{3, 8, 7, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x8x7x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0.,  0., 0., 0., 0., 1., 0.,
      2., 0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0.,  0., 3., 0., 4., 0., 0.,
      0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 5., 0., 6.,  0., 0.,  0., 0., 0.,  0., 0., 0., 0., 0., 0.,
      7., 0., 8., 0., 0., 0.,  0., 0.,  0., 0., 0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0.,  0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0.,  0., 0.,  9., 0., 10., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 11., 0., 12., 0., 0., 0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{3, 8, 7, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x8x7x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 1.,   2.,   0., 0., 3.,   4.,   0., 0., 12.,  14.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 9.,   10.,  0., 0., 11.,  12.,  0., 0., 28.,  30.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 42.,  44.,  0., 0., 46.,  48.,  0., 0., 104., 108.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 33.,  34.,  0., 0., 35.,  36.,  0., 0., 76.,  78.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 41.,  42.,  0., 0., 43.,  44.,  0., 0., 92.,  94.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 106., 108., 0., 0., 110., 112., 0., 0., 232., 236.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 65.,  66.,  0., 0., 67.,  68.,  0., 0., 140., 142.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 73.,  74.,  0., 0., 75.,  76.,  0., 0., 156., 158.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 170., 172., 0., 0., 174., 176., 0., 0., 360., 364.};
  const std::array<int, 4> in_shape = {{3, 8, 7, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x8x7x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      1.,  2.,  0., 0., 3.,  4.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 5.,  6.,  0., 0.,
      7.,  8.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      9.,  10., 0., 0., 11., 12., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 13., 14., 0., 0.,
      15., 16., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      17., 18., 0., 0., 19., 20., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 21., 22., 0., 0.,
      23., 24., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0.};
  const std::array<int, 4> in_shape = {{3, 8, 7, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x8x7x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   1.,   2.,   3.,   4.,
      0.,   0.,   0.,   0.,   5.,   6.,   7.,   8.,   0.,   0.,   0.,   0.,
      22.,  24.,  26.,  28.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   17.,  18.,  19.,  20.,  0.,   0.,   0.,   0.,
      21.,  22.,  23.,  24.,  0.,   0.,   0.,   0.,   54.,  56.,  58.,  60.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      82.,  84.,  86.,  88.,  0.,   0.,   0.,   0.,   90.,  92.,  94.,  96.,
      0.,   0.,   0.,   0.,   204., 208., 212., 216., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   65.,  66.,  67.,  68.,  0.,   0.,   0.,   0.,
      69.,  70.,  71.,  72.,  0.,   0.,   0.,   0.,   150., 152., 154., 156.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      81.,  82.,  83.,  84.,  0.,   0.,   0.,   0.,   85.,  86.,  87.,  88.,
      0.,   0.,   0.,   0.,   182., 184., 186., 188., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   210., 212., 214., 216.,
      0.,   0.,   0.,   0.,   218., 220., 222., 224., 0.,   0.,   0.,   0.,
      460., 464., 468., 472., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      129., 130., 131., 132., 0.,   0.,   0.,   0.,   133., 134., 135., 136.,
      0.,   0.,   0.,   0.,   278., 280., 282., 284., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   145., 146., 147., 148.,
      0.,   0.,   0.,   0.,   149., 150., 151., 152., 0.,   0.,   0.,   0.,
      310., 312., 314., 316., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   338., 340., 342., 344., 0.,   0.,   0.,   0.,
      346., 348., 350., 352., 0.,   0.,   0.,   0.,   716., 720., 724., 728.};
  const std::array<int, 4> in_shape = {{3, 8, 7, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x8x7x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 9.,  10., 11., 12., 0., 0., 0., 0.,
      13., 14., 15., 16., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      17., 18., 19., 20., 0., 0., 0., 0., 21., 22., 23., 24., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 25., 26., 27., 28., 0., 0., 0., 0.,
      29., 30., 31., 32., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      33., 34., 35., 36., 0., 0., 0., 0., 37., 38., 39., 40., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 41., 42., 43., 44., 0., 0., 0., 0.,
      45., 46., 47., 48., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{3, 8, 7, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x8x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,  0., 2.,  0., 7.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 5.,  0., 6.,  0., 15.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 22., 0., 24., 0., 54.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 17., 0., 18., 0., 39.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 21., 0., 22., 0., 47.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 54., 0., 56., 0., 118.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 33., 0., 34., 0., 71.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 37., 0., 38., 0., 79.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 86., 0., 88., 0., 182.};
  const std::array<int, 4> in_shape = {{3, 8, 8, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x8x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      1.,  0., 2.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 3., 0.,
      4.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 5., 0., 6., 0., 0., 0., 0., 0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 7., 0., 8., 0., 0., 0., 0., 0., 0., 0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0.,  0., 9.,  0., 10., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      11., 0., 12., 0., 0.,  0., 0., 0., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{3, 8, 8, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x8x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 1.,   2.,   0., 0., 3.,   4.,
      0., 0., 12.,  14.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 9.,   10.,  0., 0., 11.,  12.,  0., 0., 28.,  30.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 42.,  44.,
      0., 0., 46.,  48.,  0., 0., 104., 108., 0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 33.,  34.,  0., 0., 35.,  36.,  0., 0., 76.,  78.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 41.,  42.,
      0., 0., 43.,  44.,  0., 0., 92.,  94.,  0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 106., 108., 0., 0., 110., 112.,
      0., 0., 232., 236., 0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 65.,  66.,
      0., 0., 67.,  68.,  0., 0., 140., 142., 0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 73.,  74.,  0., 0., 75.,  76.,
      0., 0., 156., 158., 0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 170., 172., 0., 0., 174., 176., 0., 0., 360., 364.};
  const std::array<int, 4> in_shape = {{3, 8, 8, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x8x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  0., 0., 3.,  4.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 5.,  6.,  0., 0., 7.,  8.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 9.,  10., 0., 0., 11., 12., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 13., 14., 0., 0., 15., 16., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 17., 18., 0., 0., 19., 20., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 21., 22., 0., 0., 23., 24., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.};
  const std::array<int, 4> in_shape = {{3, 8, 8, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x8x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      1.,   2.,   3.,   4.,   0.,   0.,   0.,   0.,   5.,   6.,   7.,   8.,
      0.,   0.,   0.,   0.,   22.,  24.,  26.,  28.,  0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   17.,  18.,  19.,  20.,  0.,   0.,   0.,   0.,
      21.,  22.,  23.,  24.,  0.,   0.,   0.,   0.,   54.,  56.,  58.,  60.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   82.,  84.,  86.,  88.,
      0.,   0.,   0.,   0.,   90.,  92.,  94.,  96.,  0.,   0.,   0.,   0.,
      204., 208., 212., 216., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   65.,  66.,  67.,  68.,  0.,   0.,   0.,   0.,
      69.,  70.,  71.,  72.,  0.,   0.,   0.,   0.,   150., 152., 154., 156.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   81.,  82.,  83.,  84.,
      0.,   0.,   0.,   0.,   85.,  86.,  87.,  88.,  0.,   0.,   0.,   0.,
      182., 184., 186., 188., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      210., 212., 214., 216., 0.,   0.,   0.,   0.,   218., 220., 222., 224.,
      0.,   0.,   0.,   0.,   460., 464., 468., 472., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   129., 130., 131., 132.,
      0.,   0.,   0.,   0.,   133., 134., 135., 136., 0.,   0.,   0.,   0.,
      278., 280., 282., 284., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      145., 146., 147., 148., 0.,   0.,   0.,   0.,   149., 150., 151., 152.,
      0.,   0.,   0.,   0.,   310., 312., 314., 316., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   338., 340., 342., 344., 0.,   0.,   0.,   0.,
      346., 348., 350., 352., 0.,   0.,   0.,   0.,   716., 720., 724., 728.};
  const std::array<int, 4> in_shape = {{3, 8, 8, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x8x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      9.,  10., 11., 12., 0., 0., 0., 0., 13., 14., 15., 16., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      17., 18., 19., 20., 0., 0., 0., 0., 21., 22., 23., 24., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      25., 26., 27., 28., 0., 0., 0., 0., 29., 30., 31., 32., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      33., 34., 35., 36., 0., 0., 0., 0., 37., 38., 39., 40., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      41., 42., 43., 44., 0., 0., 0., 0., 45., 46., 47., 48., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{3, 8, 8, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x8x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0.,  0., 0.,  0., 0.,   0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,   0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 1.,   0., 2.,  0., 3.,   0., 9.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,   0., 0.,  0., 0.,   0., 6.,   0., 7.,
      0., 8.,  0., 19., 0., 0.,   0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 27., 0., 29.,  0., 31., 0., 68.,  0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,   0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,   0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 21., 0., 22., 0., 23.,  0., 49., 0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,   0., 26., 0., 27.,  0., 28.,  0., 59.,
      0., 0.,  0., 0.,  0., 0.,   0., 0.,  0., 0.,   0., 0.,   0., 67.,
      0., 69., 0., 71., 0., 148., 0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,   0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,   0., 0.,  0., 0.,   0., 41.,  0., 42.,
      0., 43., 0., 89., 0., 0.,   0., 0.,  0., 0.,   0., 0.,   0., 0.,
      0., 0.,  0., 46., 0., 47.,  0., 48., 0., 99.,  0., 0.,   0., 0.,
      0., 0.,  0., 0.,  0., 0.,   0., 0.,  0., 107., 0., 109., 0., 111.,
      0., 228.};
  const std::array<int, 4> in_shape = {{3, 8, 10, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x8x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 1.,  0., 2.,  0.,
      3.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,
      4.,  0., 5.,  0., 6.,  0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 7.,  0., 8.,  0.,
      9.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,
      10., 0., 11., 0., 12., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 13., 0., 14., 0.,
      15., 0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.,
      16., 0., 17., 0., 18., 0., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0.};
  const std::array<int, 4> in_shape = {{3, 8, 10, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x8x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  1.,  2.,   0.,   0.,  3.,   4.,   0.,   0.,   5.,   6.,   0.,   0.,
      16., 18., 0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  11.,  12.,  0.,  0.,   13.,  14.,  0.,   0.,   15.,  16.,  0.,
      0.,  36., 38.,  0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   52.,  54., 0.,   0.,   56.,  58.,  0.,   0.,   60.,  62.,
      0.,  0.,  132., 136., 0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  41.,  42.,  0.,   0.,   43.,  44.,  0.,   0.,
      45., 46., 0.,   0.,   96., 98.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   51.,  52.,  0.,   0.,   53.,  54.,  0.,
      0.,  55., 56.,  0.,   0.,  116., 118., 0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   132., 134., 0.,   0.,   136., 138.,
      0.,  0.,  140., 142., 0.,  0.,   292., 296., 0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   81.,  82.,  0.,   0.,
      83., 84., 0.,   0.,   85., 86.,  0.,   0.,   176., 178., 0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   91.,  92.,  0.,
      0.,  93., 94.,  0.,   0.,  95.,  96.,  0.,   0.,   196., 198., 0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,   0.,  0.,   0.,   0.,   0.,   0.,   0.,   212., 214.,
      0.,  0.,  216., 218., 0.,  0.,   220., 222., 0.,   0.,   452., 456.};
  const std::array<int, 4> in_shape = {{3, 8, 10, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x8x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 1.,  2.,  0., 0., 3.,  4.,  0., 0.,
      5.,  6.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      7.,  8.,  0., 0., 9.,  10., 0., 0., 11., 12., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 13., 14., 0., 0., 15., 16., 0., 0.,
      17., 18., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      19., 20., 0., 0., 21., 22., 0., 0., 23., 24., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 25., 26., 0., 0., 27., 28., 0., 0.,
      29., 30., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      31., 32., 0., 0., 33., 34., 0., 0., 35., 36., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.};
  const std::array<int, 4> in_shape = {{3, 8, 10, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x8x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      1.,   2.,   3.,   4.,   0.,   0.,   0.,   0.,   5.,   6.,   7.,   8.,
      0.,   0.,   0.,   0.,   9.,   10.,  11.,  12.,  0.,   0.,   0.,   0.,
      30.,  32.,  34.,  36.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   21.,  22.,  23.,  24.,
      0.,   0.,   0.,   0.,   25.,  26.,  27.,  28.,  0.,   0.,   0.,   0.,
      29.,  30.,  31.,  32.,  0.,   0.,   0.,   0.,   70.,  72.,  74.,  76.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   102., 104., 106., 108., 0.,   0.,   0.,   0.,
      110., 112., 114., 116., 0.,   0.,   0.,   0.,   118., 120., 122., 124.,
      0.,   0.,   0.,   0.,   260., 264., 268., 272., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   81.,  82.,  83.,  84.,
      0.,   0.,   0.,   0.,   85.,  86.,  87.,  88.,  0.,   0.,   0.,   0.,
      89.,  90.,  91.,  92.,  0.,   0.,   0.,   0.,   190., 192., 194., 196.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   101., 102., 103., 104., 0.,   0.,   0.,   0.,
      105., 106., 107., 108., 0.,   0.,   0.,   0.,   109., 110., 111., 112.,
      0.,   0.,   0.,   0.,   230., 232., 234., 236., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      262., 264., 266., 268., 0.,   0.,   0.,   0.,   270., 272., 274., 276.,
      0.,   0.,   0.,   0.,   278., 280., 282., 284., 0.,   0.,   0.,   0.,
      580., 584., 588., 592., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   161., 162., 163., 164., 0.,   0.,   0.,   0.,
      165., 166., 167., 168., 0.,   0.,   0.,   0.,   169., 170., 171., 172.,
      0.,   0.,   0.,   0.,   350., 352., 354., 356., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      181., 182., 183., 184., 0.,   0.,   0.,   0.,   185., 186., 187., 188.,
      0.,   0.,   0.,   0.,   189., 190., 191., 192., 0.,   0.,   0.,   0.,
      390., 392., 394., 396., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   422., 424., 426., 428.,
      0.,   0.,   0.,   0.,   430., 432., 434., 436., 0.,   0.,   0.,   0.,
      438., 440., 442., 444., 0.,   0.,   0.,   0.,   900., 904., 908., 912.};
  const std::array<int, 4> in_shape = {{3, 8, 10, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x8x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      9.,  10., 11., 12., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      13., 14., 15., 16., 0., 0., 0., 0., 17., 18., 19., 20., 0., 0., 0., 0.,
      21., 22., 23., 24., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      25., 26., 27., 28., 0., 0., 0., 0., 29., 30., 31., 32., 0., 0., 0., 0.,
      33., 34., 35., 36., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      37., 38., 39., 40., 0., 0., 0., 0., 41., 42., 43., 44., 0., 0., 0., 0.,
      45., 46., 47., 48., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      49., 50., 51., 52., 0., 0., 0., 0., 53., 54., 55., 56., 0., 0., 0., 0.,
      57., 58., 59., 60., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      61., 62., 63., 64., 0., 0., 0., 0., 65., 66., 67., 68., 0., 0., 0., 0.,
      69., 70., 71., 72., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{3, 8, 10, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x10x7x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,   0., 0.,   0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,   0., 2.,   0., 7.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 5.,   0., 6.,   0., 15.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 9.,   0., 10.,  0., 23.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 30.,  0., 32.,  0., 70.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,   0., 0.,   0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 21.,  0., 22.,  0., 47.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 25.,  0., 26.,  0., 55.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 29.,  0., 30.,  0., 63.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 70.,  0., 72.,  0., 150.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,   0., 0.,   0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 41.,  0., 42.,  0., 87.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 45.,  0., 46.,  0., 95.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 49.,  0., 50.,  0., 103.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 110., 0., 112., 0., 230.};
  const std::array<int, 4> in_shape = {{3, 10, 7, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x10x7x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,  0.,
      0., 0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 1.,  0.,
      2., 0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0.,  3., 0.,  4., 0.,  0.,
      0., 0.,  0.,  0., 0.,  0., 0., 0., 0., 5., 0., 6.,  0., 0.,  0., 0.,  0.,
      0., 0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,  0.,
      0., 0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,  0.,
      7., 0.,  8.,  0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0.,  9., 0.,  10.,
      0., 0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 11., 0., 12., 0., 0.,  0.,
      0., 0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,  0.,
      0., 0.,  0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,  0.,
      0., 0.,  13., 0., 14., 0., 0., 0., 0., 0., 0., 0.,  0., 0.,  0., 0.,  15.,
      0., 16., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 17., 0., 18., 0.,
      0., 0.,  0.,  0., 0.,  0.};
  const std::array<int, 4> in_shape = {{3, 10, 7, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x10x7x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 1.,   2.,   0., 0., 3.,   4.,   0., 0., 12.,  14.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 9.,   10.,  0., 0., 11.,  12.,  0., 0., 28.,  30.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 17.,  18.,  0., 0., 19.,  20.,  0., 0., 44.,  46.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 58.,  60.,  0., 0., 62.,  64.,  0., 0., 136., 140.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 41.,  42.,  0., 0., 43.,  44.,  0., 0., 92.,  94.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 49.,  50.,  0., 0., 51.,  52.,  0., 0., 108., 110.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 57.,  58.,  0., 0., 59.,  60.,  0., 0., 124., 126.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 138., 140., 0., 0., 142., 144., 0., 0., 296., 300.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 81.,  82.,  0., 0., 83.,  84.,  0., 0., 172., 174.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 89.,  90.,  0., 0., 91.,  92.,  0., 0., 188., 190.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 97.,  98.,  0., 0., 99.,  100., 0., 0., 204., 206.,
      0., 0., 0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0., 0., 218., 220., 0., 0., 222., 224., 0., 0., 456., 460.};
  const std::array<int, 4> in_shape = {{3, 10, 7, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x10x7x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      1.,  2.,  0., 0., 3.,  4.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 5.,  6.,  0., 0.,
      7.,  8.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 9.,  10., 0., 0., 11., 12., 0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 13., 14., 0., 0.,
      15., 16., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 17., 18., 0., 0., 19., 20., 0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 21., 22., 0., 0., 23., 24., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 25., 26., 0., 0., 27., 28., 0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 29., 30., 0., 0., 31., 32., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      33., 34., 0., 0., 35., 36., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0.};
  const std::array<int, 4> in_shape = {{3, 10, 7, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x10x7x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   1.,   2.,   3.,   4.,
      0.,   0.,   0.,   0.,   5.,   6.,   7.,   8.,   0.,   0.,   0.,   0.,
      22.,  24.,  26.,  28.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   17.,  18.,  19.,  20.,  0.,   0.,   0.,   0.,
      21.,  22.,  23.,  24.,  0.,   0.,   0.,   0.,   54.,  56.,  58.,  60.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      33.,  34.,  35.,  36.,  0.,   0.,   0.,   0.,   37.,  38.,  39.,  40.,
      0.,   0.,   0.,   0.,   86.,  88.,  90.,  92.,  0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   114., 116., 118., 120.,
      0.,   0.,   0.,   0.,   122., 124., 126., 128., 0.,   0.,   0.,   0.,
      268., 272., 276., 280., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      81.,  82.,  83.,  84.,  0.,   0.,   0.,   0.,   85.,  86.,  87.,  88.,
      0.,   0.,   0.,   0.,   182., 184., 186., 188., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   97.,  98.,  99.,  100.,
      0.,   0.,   0.,   0.,   101., 102., 103., 104., 0.,   0.,   0.,   0.,
      214., 216., 218., 220., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   113., 114., 115., 116., 0.,   0.,   0.,   0.,
      117., 118., 119., 120., 0.,   0.,   0.,   0.,   246., 248., 250., 252.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      274., 276., 278., 280., 0.,   0.,   0.,   0.,   282., 284., 286., 288.,
      0.,   0.,   0.,   0.,   588., 592., 596., 600., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   161., 162., 163., 164., 0.,   0.,   0.,   0.,
      165., 166., 167., 168., 0.,   0.,   0.,   0.,   342., 344., 346., 348.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      177., 178., 179., 180., 0.,   0.,   0.,   0.,   181., 182., 183., 184.,
      0.,   0.,   0.,   0.,   374., 376., 378., 380., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   193., 194., 195., 196.,
      0.,   0.,   0.,   0.,   197., 198., 199., 200., 0.,   0.,   0.,   0.,
      406., 408., 410., 412., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   434., 436., 438., 440., 0.,   0.,   0.,   0.,
      442., 444., 446., 448., 0.,   0.,   0.,   0.,   908., 912., 916., 920.};
  const std::array<int, 4> in_shape = {{3, 10, 7, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x10x7x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 9.,  10., 11., 12., 0., 0., 0., 0.,
      13., 14., 15., 16., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      17., 18., 19., 20., 0., 0., 0., 0., 21., 22., 23., 24., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 25., 26., 27., 28., 0., 0., 0., 0.,
      29., 30., 31., 32., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      33., 34., 35., 36., 0., 0., 0., 0., 37., 38., 39., 40., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 41., 42., 43., 44., 0., 0., 0., 0.,
      45., 46., 47., 48., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      49., 50., 51., 52., 0., 0., 0., 0., 53., 54., 55., 56., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 57., 58., 59., 60., 0., 0., 0., 0.,
      61., 62., 63., 64., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      65., 66., 67., 68., 0., 0., 0., 0., 69., 70., 71., 72., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{3, 10, 7, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x10x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,   0., 0.,   0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,   0., 2.,   0., 7.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 5.,   0., 6.,   0., 15.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 9.,   0., 10.,  0., 23.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 30.,  0., 32.,  0., 70.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,   0., 0.,   0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 21.,  0., 22.,  0., 47.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 25.,  0., 26.,  0., 55.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 29.,  0., 30.,  0., 63.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 70.,  0., 72.,  0., 150.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,   0., 0.,   0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 41.,  0., 42.,  0., 87.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 45.,  0., 46.,  0., 95.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 49.,  0., 50.,  0., 103.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 110., 0., 112., 0., 230.};
  const std::array<int, 4> in_shape = {{3, 10, 8, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x10x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 1.,  0., 2.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 3.,  0., 4.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 5.,  0., 6.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 7.,  0., 8.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 9.,  0., 10., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 11., 0., 12., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0.,  0., 0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 13., 0., 14., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 15., 0., 16., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 17., 0., 18., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{3, 10, 8, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x10x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 1.,   2.,   0., 0., 3.,   4.,
      0., 0., 12.,  14.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 9.,   10.,  0., 0., 11.,  12.,  0., 0., 28.,  30.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 17.,  18.,
      0., 0., 19.,  20.,  0., 0., 44.,  46.,  0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 58.,  60.,  0., 0., 62.,  64.,
      0., 0., 136., 140., 0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 41.,  42.,
      0., 0., 43.,  44.,  0., 0., 92.,  94.,  0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 49.,  50.,  0., 0., 51.,  52.,
      0., 0., 108., 110., 0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 57.,  58.,  0., 0., 59.,  60.,  0., 0., 124., 126.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 138., 140.,
      0., 0., 142., 144., 0., 0., 296., 300., 0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 81.,  82.,  0., 0., 83.,  84.,  0., 0., 172., 174.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 89.,  90.,
      0., 0., 91.,  92.,  0., 0., 188., 190., 0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 97.,  98.,  0., 0., 99.,  100.,
      0., 0., 204., 206., 0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 218., 220., 0., 0., 222., 224., 0., 0., 456., 460.};
  const std::array<int, 4> in_shape = {{3, 10, 8, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x10x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  0., 0., 3.,  4.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 5.,  6.,  0., 0., 7.,  8.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 9.,  10., 0., 0., 11., 12., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 13., 14., 0., 0., 15., 16., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 17., 18., 0., 0., 19., 20., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 21., 22., 0., 0., 23., 24., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 25., 26., 0., 0., 27., 28., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 29., 30., 0., 0., 31., 32., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 33., 34., 0., 0., 35., 36., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.};
  const std::array<int, 4> in_shape = {{3, 10, 8, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x10x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      1.,   2.,   3.,   4.,   0.,   0.,   0.,   0.,   5.,   6.,   7.,   8.,
      0.,   0.,   0.,   0.,   22.,  24.,  26.,  28.,  0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   17.,  18.,  19.,  20.,  0.,   0.,   0.,   0.,
      21.,  22.,  23.,  24.,  0.,   0.,   0.,   0.,   54.,  56.,  58.,  60.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   33.,  34.,  35.,  36.,
      0.,   0.,   0.,   0.,   37.,  38.,  39.,  40.,  0.,   0.,   0.,   0.,
      86.,  88.,  90.,  92.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      114., 116., 118., 120., 0.,   0.,   0.,   0.,   122., 124., 126., 128.,
      0.,   0.,   0.,   0.,   268., 272., 276., 280., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   81.,  82.,  83.,  84.,
      0.,   0.,   0.,   0.,   85.,  86.,  87.,  88.,  0.,   0.,   0.,   0.,
      182., 184., 186., 188., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      97.,  98.,  99.,  100., 0.,   0.,   0.,   0.,   101., 102., 103., 104.,
      0.,   0.,   0.,   0.,   214., 216., 218., 220., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   113., 114., 115., 116., 0.,   0.,   0.,   0.,
      117., 118., 119., 120., 0.,   0.,   0.,   0.,   246., 248., 250., 252.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   274., 276., 278., 280.,
      0.,   0.,   0.,   0.,   282., 284., 286., 288., 0.,   0.,   0.,   0.,
      588., 592., 596., 600., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   161., 162., 163., 164., 0.,   0.,   0.,   0.,
      165., 166., 167., 168., 0.,   0.,   0.,   0.,   342., 344., 346., 348.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   177., 178., 179., 180.,
      0.,   0.,   0.,   0.,   181., 182., 183., 184., 0.,   0.,   0.,   0.,
      374., 376., 378., 380., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      193., 194., 195., 196., 0.,   0.,   0.,   0.,   197., 198., 199., 200.,
      0.,   0.,   0.,   0.,   406., 408., 410., 412., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   434., 436., 438., 440., 0.,   0.,   0.,   0.,
      442., 444., 446., 448., 0.,   0.,   0.,   0.,   908., 912., 916., 920.};
  const std::array<int, 4> in_shape = {{3, 10, 8, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x10x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      1.,  2.,  3.,  4.,  0., 0., 0., 0., 5.,  6.,  7.,  8.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      9.,  10., 11., 12., 0., 0., 0., 0., 13., 14., 15., 16., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      17., 18., 19., 20., 0., 0., 0., 0., 21., 22., 23., 24., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      25., 26., 27., 28., 0., 0., 0., 0., 29., 30., 31., 32., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      33., 34., 35., 36., 0., 0., 0., 0., 37., 38., 39., 40., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      41., 42., 43., 44., 0., 0., 0., 0., 45., 46., 47., 48., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      49., 50., 51., 52., 0., 0., 0., 0., 53., 54., 55., 56., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      57., 58., 59., 60., 0., 0., 0., 0., 61., 62., 63., 64., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      65., 66., 67., 68., 0., 0., 0., 0., 69., 70., 71., 72., 0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,
      0.,  0.,  0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.};
  const std::array<int, 4> in_shape = {{3, 10, 8, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x10x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0.,   0., 0.,   0., 0.,  0., 0.,   0., 0.,  0., 0.,  0., 0.,
      0., 0.,   0., 0.,   0., 0.,  0., 0.,   0., 0.,  0., 0.,  0., 0.,
      0., 0.,   0., 0.,   0., 1.,  0., 2.,   0., 3.,  0., 9.,  0., 0.,
      0., 0.,   0., 0.,   0., 0.,  0., 0.,   0., 0.,  0., 6.,  0., 7.,
      0., 8.,   0., 19.,  0., 0.,  0., 0.,   0., 0.,  0., 0.,  0., 0.,
      0., 0.,   0., 11.,  0., 12., 0., 13.,  0., 29., 0., 0.,  0., 0.,
      0., 0.,   0., 0.,   0., 0.,  0., 0.,   0., 37., 0., 39., 0., 41.,
      0., 88.,  0., 0.,   0., 0.,  0., 0.,   0., 0.,  0., 0.,  0., 0.,
      0., 0.,   0., 0.,   0., 0.,  0., 0.,   0., 0.,  0., 0.,  0., 0.,
      0., 0.,   0., 0.,   0., 0.,  0., 26.,  0., 27., 0., 28., 0., 59.,
      0., 0.,   0., 0.,   0., 0.,  0., 0.,   0., 0.,  0., 0.,  0., 31.,
      0., 32.,  0., 33.,  0., 69., 0., 0.,   0., 0.,  0., 0.,  0., 0.,
      0., 0.,   0., 0.,   0., 36., 0., 37.,  0., 38., 0., 79., 0., 0.,
      0., 0.,   0., 0.,   0., 0.,  0., 0.,   0., 0.,  0., 87., 0., 89.,
      0., 91.,  0., 188., 0., 0.,  0., 0.,   0., 0.,  0., 0.,  0., 0.,
      0., 0.,   0., 0.,   0., 0.,  0., 0.,   0., 0.,  0., 0.,  0., 0.,
      0., 0.,   0., 0.,   0., 0.,  0., 0.,   0., 51., 0., 52., 0., 53.,
      0., 109., 0., 0.,   0., 0.,  0., 0.,   0., 0.,  0., 0.,  0., 0.,
      0., 56.,  0., 57.,  0., 58., 0., 119., 0., 0.,  0., 0.,  0., 0.,
      0., 0.,   0., 0.,   0., 0.,  0., 61.,  0., 62., 0., 63., 0., 129.,
      0., 0.,   0., 0.,   0., 0.,  0., 0.,   0., 0.,  0., 0.,  0., 137.,
      0., 139., 0., 141., 0., 288.};
  const std::array<int, 4> in_shape = {{3, 10, 10, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x10x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 1.,  0., 2.,  0.,
      3.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0.,
      4.,  0., 5.,  0., 6.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 7.,  0., 8.,  0., 9.,  0., 0.,  0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0.,
      10., 0., 11., 0., 12., 0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 13., 0., 14., 0., 15., 0., 0.,  0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0.,  0., 16., 0., 17., 0., 18., 0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 19., 0., 20., 0., 21., 0., 0.,  0., 0.,  0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0.,  0., 22., 0., 23., 0., 24., 0., 0.,  0.,
      0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 25., 0., 26., 0.,
      27., 0., 0.,  0., 0.,  0., 0.,  0., 0.,  0., 0.,  0.};
  const std::array<int, 4> in_shape = {{3, 10, 10, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x10x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 1.,   2.,   0., 0., 3.,   4.,
      0., 0., 5.,   6.,   0., 0., 16.,  18.,  0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 11.,  12.,
      0., 0., 13.,  14.,  0., 0., 15.,  16.,  0., 0., 36.,  38.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 21.,  22.,  0., 0., 23.,  24.,  0., 0., 25.,  26.,
      0., 0., 56.,  58.,  0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 72.,  74.,  0., 0., 76.,  78.,
      0., 0., 80.,  82.,  0., 0., 172., 176., 0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 51.,  52.,  0., 0., 53.,  54.,  0., 0., 55.,  56.,
      0., 0., 116., 118., 0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 61.,  62.,  0., 0., 63.,  64.,
      0., 0., 65.,  66.,  0., 0., 136., 138., 0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 71.,  72.,
      0., 0., 73.,  74.,  0., 0., 75.,  76.,  0., 0., 156., 158.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 172., 174., 0., 0., 176., 178., 0., 0., 180., 182.,
      0., 0., 372., 376., 0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 101., 102.,
      0., 0., 103., 104., 0., 0., 105., 106., 0., 0., 216., 218.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 111., 112., 0., 0., 113., 114., 0., 0., 115., 116.,
      0., 0., 236., 238., 0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 121., 122., 0., 0., 123., 124.,
      0., 0., 125., 126., 0., 0., 256., 258., 0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 0.,   0.,
      0., 0., 0.,   0.,   0., 0., 0.,   0.,   0., 0., 272., 274.,
      0., 0., 276., 278., 0., 0., 280., 282., 0., 0., 572., 576.};
  const std::array<int, 4> in_shape = {{3, 10, 10, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x10x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 1.,  2.,  0., 0., 3.,  4.,  0., 0.,
      5.,  6.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      7.,  8.,  0., 0., 9.,  10., 0., 0., 11., 12., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 13., 14., 0., 0., 15., 16., 0., 0.,
      17., 18., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      19., 20., 0., 0., 21., 22., 0., 0., 23., 24., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 25., 26., 0., 0., 27., 28., 0., 0.,
      29., 30., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      31., 32., 0., 0., 33., 34., 0., 0., 35., 36., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 37., 38., 0., 0., 39., 40., 0., 0.,
      41., 42., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      43., 44., 0., 0., 45., 46., 0., 0., 47., 48., 0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0., 49., 50., 0., 0., 51., 52., 0., 0.,
      53., 54., 0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0., 0.,  0.,  0., 0.,
      0.,  0.,  0., 0., 0.,  0.,  0., 0.};
  const std::array<int, 4> in_shape = {{3, 10, 10, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, SAME3x10x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      1.,   2.,   3.,   4.,   0.,   0.,   0.,   0.,   5.,    6.,    7.,
      8.,   0.,   0.,   0.,   0.,   9.,   10.,  11.,  12.,   0.,    0.,
      0.,   0.,   30.,  32.,  34.,  36.,  0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   21.,  22.,  23.,  24.,  0.,   0.,    0.,    0.,
      25.,  26.,  27.,  28.,  0.,   0.,   0.,   0.,   29.,   30.,   31.,
      32.,  0.,   0.,   0.,   0.,   70.,  72.,  74.,  76.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   41.,  42.,  43.,   44.,   0.,
      0.,   0.,   0.,   45.,  46.,  47.,  48.,  0.,   0.,    0.,    0.,
      49.,  50.,  51.,  52.,  0.,   0.,   0.,   0.,   110.,  112.,  114.,
      116., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    142.,  144.,
      146., 148., 0.,   0.,   0.,   0.,   150., 152., 154.,  156.,  0.,
      0.,   0.,   0.,   158., 160., 162., 164., 0.,   0.,    0.,    0.,
      340., 344., 348., 352., 0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   101., 102., 103., 104., 0.,    0.,    0.,
      0.,   105., 106., 107., 108., 0.,   0.,   0.,   0.,    109.,  110.,
      111., 112., 0.,   0.,   0.,   0.,   230., 232., 234.,  236.,  0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   121., 122.,  123.,  124.,
      0.,   0.,   0.,   0.,   125., 126., 127., 128., 0.,    0.,    0.,
      0.,   129., 130., 131., 132., 0.,   0.,   0.,   0.,    270.,  272.,
      274., 276., 0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    141.,
      142., 143., 144., 0.,   0.,   0.,   0.,   145., 146.,  147.,  148.,
      0.,   0.,   0.,   0.,   149., 150., 151., 152., 0.,    0.,    0.,
      0.,   310., 312., 314., 316., 0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   342., 344., 346., 348., 0.,   0.,   0.,    0.,    350.,
      352., 354., 356., 0.,   0.,   0.,   0.,   358., 360.,  362.,  364.,
      0.,   0.,   0.,   0.,   740., 744., 748., 752., 0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   201.,  202.,  203.,
      204., 0.,   0.,   0.,   0.,   205., 206., 207., 208.,  0.,    0.,
      0.,   0.,   209., 210., 211., 212., 0.,   0.,   0.,    0.,    430.,
      432., 434., 436., 0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      221., 222., 223., 224., 0.,   0.,   0.,   0.,   225.,  226.,  227.,
      228., 0.,   0.,   0.,   0.,   229., 230., 231., 232.,  0.,    0.,
      0.,   0.,   470., 472., 474., 476., 0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   241., 242., 243., 244., 0.,   0.,    0.,    0.,
      245., 246., 247., 248., 0.,   0.,   0.,   0.,   249.,  250.,  251.,
      252., 0.,   0.,   0.,   0.,   510., 512., 514., 516.,  0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   542., 544., 546.,  548.,  0.,
      0.,   0.,   0.,   550., 552., 554., 556., 0.,   0.,    0.,    0.,
      558., 560., 562., 564., 0.,   0.,   0.,   0.,   1140., 1144., 1148.,
      1152.};
  const std::array<int, 4> in_shape = {{3, 10, 10, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxwithnanWindow5Stride2Grad, VALID3x10x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  1.,  2.,   3.,   4.,   0.,   0.,
      0.,   0.,   5.,   6.,   7.,  8.,  0.,  0.,  0.,   0.,   9.,   10.,  11.,
      12.,  0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   13.,  14.,  15.,  16.,
      0.,   0.,   0.,   0.,   17., 18., 19., 20., 0.,   0.,   0.,   0.,   21.,
      22.,  23.,  24.,  0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   25.,  26.,
      27.,  28.,  0.,   0.,   0.,  0.,  29., 30., 31.,  32.,  0.,   0.,   0.,
      0.,   33.,  34.,  35.,  36., 0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   37., 38., 39., 40., 0.,   0.,   0.,   0.,   41.,
      42.,  43.,  44.,  0.,   0.,  0.,  0.,  45., 46.,  47.,  48.,  0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  49., 50., 51.,  52.,  0.,   0.,   0.,
      0.,   53.,  54.,  55.,  56., 0.,  0.,  0.,  0.,   57.,  58.,  59.,  60.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  61.,  62.,  63.,  64.,  0.,
      0.,   0.,   0.,   65.,  66., 67., 68., 0.,  0.,   0.,   0.,   69.,  70.,
      71.,  72.,  0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   73.,  74.,  75.,  76., 0.,  0.,  0.,  0.,   77.,  78.,  79.,  80.,
      0.,   0.,   0.,   0.,   81., 82., 83., 84., 0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   85.,  86., 87., 88., 0.,  0.,   0.,   0.,   89.,  90.,
      91.,  92.,  0.,   0.,   0.,  0.,  93., 94., 95.,  96.,  0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  97., 98., 99., 100., 0.,   0.,   0.,   0.,
      101., 102., 103., 104., 0.,  0.,  0.,  0.,  105., 106., 107., 108., 0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.};
  const std::array<int, 4> in_shape = {{3, 10, 10, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<5, 2>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
